#dart #flutter
#dart #flutter
Вопрос:
var num1 = 10.12345678
Что мне следует сделать с num1, чтобы удалить цифры после двух знаков после запятой без округления их значения.
Мне нужен вывод как 10.12
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
title: ' Delete digits after two decimal point ',
theme: ThemeData(primarySwatch: Colors.blue),
home: MyHome(),
));
class MyHome extends StatefulWidget {
@override
_MyHomeState createState() => _MyHomeState();
}
class _MyHomeState extends State<MyHome> {
@override
Widget build(BuildContext context) {
var num1 = 10.12345678;
print(num1); // I need output as 10.12
return Container();
}
}
Комментарии:
1. что, если у вас есть
10.1299999
? вы бы все еще хотели показать10.12
? честно говоря, я не могу придумать какой-либо вариант использования для этого…2. у меня в кошельке 10.1299999 ether, я хочу показать его значение с точностью до 2 знаков после запятой
3. что вы хотите показать, если у вас есть 10.129999? 10.12 или 10.13? как вы думаете, какое значение более реалистично? 10.12? действительно?
Ответ №1:
Если вы хотите округлить число:
var num1 = 10.12345678;
var num2 = double.parse(num1.toStringAsFixed(2)); // num2 = 10.12
Если вы не хотите округлять число:
Создайте этот метод:
double getNumber(double input, {int precision = 2}) =>
double.parse('$input'.substring(0, '$input'.indexOf('.') precision 1));
Использование:
var input = 113.39999999999999;
var output = getNumber(input, precision: 1); // 113.9
var output = getNumber(input, precision: 2); // 113.99
var output = getNumber(input, precision: 3); // 113.999
Комментарии:
1. toStringAsFixed округляет значение
2. Здравствуйте, это не работает должным образом для этого типа десятичных знаков попробуйте:- 113.39999999999999, 235.12560000000002, 146.44334999999998
3. @RakeshLanjewar Что именно не работает?
4. Я дал вам десятичные дроби в комментарии выше, если вы попытаетесь преобразовать их, они округлятся как 113,40
5. это не работает для значения 12.8, результат будет 12.8
Ответ №2:
Вы можете использовать intl package (https://pub.dartlang.org/packages/intl#-installing-tab —)
var num1 = 10.12345678;
var f = new NumberFormat("###.0#", "en_US");
print(f.format(num1));
Ответ №3:
Некоторые ответы здесь не сработали (верхний ответ округлен, а не усечен). вот способ:
(n * 100).truncateToDouble()/100
Комментарии:
1. и ответ с «val — val % 0.01» не работает с отрицательным значением.
2. Ответ правильный. Он работает как с отрицательными, так и с положительными значениями.
3. Ответ @sphinxlike неверен. Этот метод часто пропагандируется, но на самом деле он не работает в большинстве случаев. Это невозможно. С плавающей запятой просто не так.
Ответ №4:
если вы хотите округлить число, используйте это.
double mod = pow(10.0, places);
return ((val * mod).round().toDouble() / mod);
если вы просто хотите усечь, используйте это.
return val - val % 0.01;
Ответ №5:
String toFixed2DecimalPlaces(double data, {int decimalPlaces = 2}) {
List<String> values = data.toString().split('.');
if (values.length == 2 amp;amp; values[0] != '0' amp;amp; values[1].length >= decimalPlaces amp;amp; decimalPlaces > 0)
return values[0] '.' values[1].substring(0, decimalPlaces);
else
return data.toString();
}
Ответ №6:
Вы также можете попробовать это —-> (0.2055).toStringAsFixed(2)
var per = 0.2055;
Text( "result view -> ${double.parse((per * 100).toStringAsFixed(2))}%",
style: TextStyle(color: Colors.white, fontSize: 10)),
result value ->
input -> 0.2055
output -> result view ->20.00
Ответ №7:
Существует простое решение этой проблемы.
double value = 17.56565656;
//as string
String formatted = value.toStringAsFixed(2); // 17.56
//as double
double formattedDouble = double.parse(formatted); //17.56
Комментарии:
1. 17.56565656. Фиксированная завязка (2) == 17,57. !!!
Ответ №8:
extension NoRoundingDecimal on double {
String toDecimalAsFixed(int toDecimal) {
var right;
try {
right = this.toString().split(".")[1].padRight(toDecimal, "0").substring(0, toDecimal);
} catch (e) {
right = "00";
}
var left = this.toString().split(".")[0];
double number = double.parse(left "." right);
return number.toStringAsFixed(toDecimal);
}
}
Пример1:
двойная цена = 71,999999999;
print(«число: ${price.toDecimalAsFixed(3)}»);
Result: number: 71.999
Пример2: двойная цена = 71; print(«число: ${price.toDecimalAsFixed(3)}»);
Result: number: 71.000